package cn.gok.code.controller;

import cn.gok.code.entity.Entity;
import cn.gok.code.mapper.BaseMapper;
import cn.gok.code.service.MyBaseService;
import com.alibaba.fastjson.JSONObject;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.Date;
import java.util.List;

/**
 * @ClassName MyBaseController
 * @Description TODO
 * @Author HP
 * @Date 17:14 2022/7/21
 * @Version 1.0
 * 1、信息保存的时候，会默认给对象类添加，创建者创建时间，修改者修改时间
 * 2、信息修改的时候，会自动赋值 修改者修改时间
 * 有能力的可以把乐观锁以及逻辑删除，都用今天给的代码框架实现
 **/
@Controller
public class MyBaseController <T extends Entity,D extends BaseMapper<T>> {

    @Autowired
    private MyBaseService<T,D> service;

    //1）	查询所有信息
    @RequestMapping("selAll")
    public List<T> selAll(){
        return service.selAll();
    }
    //2）	根据ID查询信息
    @RequestMapping("selById")
    public T selById(@RequestBody JSONObject json){
        Integer id=json.getInteger("id");
        return (T)service.selById(id);
    }
    //3）	添加
    @RequestMapping("add")
    public int add(@RequestBody T t){
        t.setCreateTime(new Date());
        return service.add(t);
    }
    //4）	根据id修改信息
    @RequestMapping("modify")
    public int modify(@RequestBody T t){
//        实现乐观锁
//        获得当前版本
        t.setVersion(service.selVersion(t));
        t.setUpdateTime(new Date());
        return service.modify(t);
    }
    //5）	根据id删除
    @RequestMapping("delById")
    public int delById(@RequestBody JSONObject json){
        Long id=json.getLong("id");
        return service.delById(id);
    }

}
